home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / dvi / dvipssrc.zoo / dosectio.c < prev    next >
C/C++ Source or Header  |  1990-11-04  |  3KB  |  135 lines

  1. /*
  2.  *  Code to output PostScript commands for one section of the document.
  3.  */
  4. #include "structures.h" /* The copyright notice in that file is included too! */
  5. /*
  6.  *   These are the external routines we call.
  7.  */
  8. extern void dopage() ;
  9. extern void download() ;
  10. extern integer signedquad() ;
  11. extern void skipover() ;
  12. extern void cmdout() ;
  13. extern void numout() ;
  14. extern void newline() ;
  15. extern void setup() ;
  16. extern void skipover() ;
  17. extern int skipnop() ;
  18. /*
  19.  *   These are the external variables we access.
  20.  */
  21. extern FILE *dvifile ;
  22. extern FILE *bitfile ;
  23. extern integer pagenum ;
  24. extern long bytesleft ;
  25. extern quarterword *raster ;
  26. extern int quiet ;
  27. extern Boolean reverse, multiplesects, disablecomments ;
  28. extern int actualdpi ;
  29. extern int vactualdpi ;
  30. extern int prettycolumn ;
  31. static int psfont ;
  32. extern integer mag ;
  33. /*
  34.  *   Now we have the main procedure.
  35.  */
  36. void
  37. dosection(s, c)
  38.         sectiontype *s ;
  39.         int c ;
  40. {
  41.    charusetype *cu ;
  42.    integer prevptr ;
  43.    int np ;
  44.    extern void cleanres() ;
  45.  
  46.    if (multiplesects) {
  47.       setup() ;
  48.    } else {
  49.       cmdout("TeXDict") ;
  50.       cmdout("begin") ;
  51.    }
  52.    numout(mag) ;
  53.    numout((integer)DPI) ;
  54.    numout((integer)VDPI) ;
  55.    cmdout("@start") ;
  56.    if (multiplesects)
  57.       cmdout("bos") ;
  58. /*
  59.  *   We insure raster is even-word aligned, because download might want that.
  60.  */
  61.    if (bytesleft & 1) {
  62.       bytesleft-- ;
  63.       raster++ ;
  64.    }
  65.    cleanres() ;
  66.    cu = (charusetype *) (s + 1) ;
  67.    psfont = 1 ;
  68.    while (cu->fd) {
  69.       if (cu->psfused)
  70.          cu->fd->psflag = EXISTS ;
  71.       download(cu++, psfont++) ;
  72.    }
  73.    if (! multiplesects) {
  74.       cmdout("end") ;
  75.       setup() ;
  76.    }
  77.    for (cu=(charusetype *)(s+1); cu->fd; cu++)
  78.       cu->fd->psflag = 0 ;
  79.    while (c > 0) {
  80.       c-- ;
  81.       prevptr = s->bos ;
  82.       if (! reverse)
  83.          (void)fseek(dvifile, (long)prevptr, 0) ;
  84.       np = s->numpages ;
  85.       while (np-- != 0) {
  86.          if (reverse)
  87.             (void)fseek(dvifile, (long)prevptr, 0) ;
  88.          pagenum = signedquad() ;
  89. /*
  90.  *   We want to take the base 10 log of the number.  It's probably
  91.  *   small, so we do it quick.
  92.  */
  93.          if (! quiet) {
  94.             int t = pagenum, i = 0 ;
  95.             if (t < 0) {
  96.                t = -t ;
  97.                i++ ;
  98.             }
  99.             do {
  100.                i++ ;
  101.                t /= 10 ;
  102.             } while (t > 0) ;
  103.             if (i + prettycolumn > 76) {
  104.                fprintf(stderr, "\n") ;
  105.                prettycolumn = 0 ;
  106.             }
  107.             prettycolumn += i + 1 ;
  108. #ifdef SHORTINT
  109.             (void)fprintf(stderr, "[%ld", pagenum) ;
  110. #else  /* ~SHORTINT */
  111.             (void)fprintf(stderr, "[%d", pagenum) ;
  112. #endif /* ~SHORTINT */
  113.             (void)fflush(stderr) ;
  114.          }
  115.          skipover(36) ;
  116.          prevptr = signedquad()+1 ;
  117.          dopage() ;
  118.          if (! quiet) {
  119.             (void)fprintf(stderr, "] ") ;
  120.             (void)fflush(stderr) ;
  121.             prettycolumn += 2 ;
  122.          }
  123.          if (! reverse)
  124.             (void)skipnop() ;
  125.       }
  126.    }
  127.    if (! multiplesects && ! disablecomments) {
  128.       newline() ;
  129.       (void)fprintf(bitfile, "%%%%Trailer\n") ;
  130.    }
  131.    if (multiplesects)
  132.       cmdout("eos") ;
  133.    cmdout("end") ;
  134. }
  135.